#ifndef __FS_INODE_H
#define __FS_INODE_H
#include "stdint.h"
#include "list.h"
#include "ide.h"

// inode 结构
struct inode {
    uint32_t i_no; // inode 编号
    uint32_t i_size; // 若 inode 为目录，则 i_size 便是该目录下所有目录项大小之和
                     // 若 inode 为文件，则 i_size 便是文件大小
    uint32_t i_open_cnt; // 记录该文件被打开的次数之和
    bool write_deny;     // 写文件不能多个进程并行修改，进程写文件前会先检查此标识符
    uint32_t i_sectors[13]; // [0~11] 是直接块，[12] 用来存储一级间接块指针
    struct list_elem inode_tag;
};

struct inode* inode_open(struct partition* part, uint32_t inode_no);
void inode_sync(struct partition* part, struct inode* inode, void* io_buf);
void inode_init(uint32_t inode_no, struct inode* new_inode);
void inode_close(struct inode* inode);
#endif